package thread;

/**
 * @Author:Cjj
 * 进程和线程的主要区别
 *
 */
public class Thread {
    /**
     * 1.根本区别：
     *  进程是操作系统资源分配的基本单位，线程是CPU调度的基本单位。
     *  线程是任务调度和执行的基本单位
     *  在开销方面：每个进程都有独立的代码和数据空间,程序之间的切换会有较大的开销;线程
     *  可以看做轻量级的进程,同一类线程共享代码和数据空间,每个线程都有自己独立的运行栈
     *  和程序计数器(PC),线程之间切换的开销小。
     *
     *  所处环境：在操作系统中能同时运行多个进程(程序),而在同一个进程(程序)中有多个线程同时
     *  执行(通过CPU调度,在每个时间片中只有一个线程执行)
     *
     *  内存分配方面：系统在运行的时候会为每个进程分配不同的内存空间;而对线程而言,除了CPU外,系统不会为线程分配内存
     *  (线程所使用的资源来自其所属进程的资源),线程组之间只能共享资源。
     *  包含关系：没有线程的进程可以看做是单线程的,如果一个进程内有多个线程,则执行过程不是一条线的,而是多条线(线程)
     *  共同完成的;线程是进程的一部分,所以线程也被称为轻权或者轻量级进程。
     */


    /**
     * 进程：
     *  是程序执行时一个实例,即它是程序已经执行到课中程度的数据结构的汇集。从内核的观点看,进程的目的就是担当分配
     *  系统资源(CPU时间,内存等)的基本单位
     *
     *线程：
     *  是CPU调度的最小单位(程序执行流的最小单元,它被包含在进程之中,是进程中的实际运作单元)。
     *  一条线程是进程中一个单一顺序的控制流,一个进程中可以并发多个线程,每条线程并行执行不同的任务。
     *  一个标准的线程有线程ID,当前指令指针(PC),寄存器集合和堆栈组成。另外,线程是进程中的一个实体,是被系统独立
     *  调度和分派的基本单元,线程自己不拥有系统资源,只拥有一点在运行中必不可少的资源,但它可与同属一个进程的其他线程共享全部资源。
     *  一个线程可以创建和撤销另一个线程,同一进程中的多个线程之间可以并发执行。由于线程之间的相互制约,致使线程在运行中呈现处间断
     *  性。
     *
     *  线程也有就绪,阻塞和运行三种基本状态。就绪状态是指线程具备运行的所有条件,逻辑上可以运行,在等待处理机;运行状态是指线程占有处理
     *  正在运行;阻塞状态是指线程在等待一个事件(如某个信号量),逻辑上不可执行。每一个程序都至少有一个线程,若程序只有一个线程,那就是程序本身。
     *  进程有独立的地址空间,线程没有单独的地址空间(同一进程内的线程共享进程的地址空间)。
     *
     * 多进程
     * 进程是程序在计算机上的一次执行活动。当你运行一个程序,你就启动一个进程。显然,程序是死的(静态的),进程是活的(动态的)。
     * 进程可以分为系统进程和用户进程。凡是用于完成操作系统的各种功能的进程就是系统进程。它们就是处于运行状态下的操作系统本身;
     * 所有由用户启动的进程都是用户进程。进程是操作系统进行资源分配的单位。进程又被细化为线程,也就是一个进程下有多个能独立运行的更小
     */
}
